課程資訊
課程名稱
計算機程式設計
Computer Programming 
開課學期
110-2 
授課對象
 
授課教師
鄭士康 
課號
EE3031 
課程識別碼
901 33920 
班次
 
學分
3.0 
全/半年
半年 
必/選修
 
上課時間
星期五7,8,9(14:20~17:20) 
上課地點
博雅301 
備註
A6:量化分析與數學素養
總人數上限:38人 
 
課程簡介影片
 
核心能力關聯
核心能力與課程規劃關聯圖
課程大綱
為確保您我的權利,請尊重智慧財產權及不得非法影印
課程概述

注意: 為簡化教材及實作討論, 本課程教學不支援蘋果或其他作業系統. 使用蘋果或其他系統同學不鼓勵修習本課程.

注意: 同樣為簡化教材, 教學進度不包含 Unity 遊戲製作教學. 有需要的同學仍可修習本課程, 但請自行參考以往教學錄影及網路資源學習.

注意: 本課程須投入甚多時間撰寫程式與報告, 課程負擔由輕而重, 至期末時達最高峰, 課業繁重或無決心毅力之同學請慎重考慮.

注意: 本課程需要同學自主學習,請同學依本身情況及課程進展之難易程度,增減學習時間, 調整學習內容與進度。 同時也要能夠善用網路,搜尋相關資源,解決問題及應用於作業和期末專題。

注意: 由於全學期課程講授已經有影音檔放置於台大開放課程網(http://ocw.aca.ntu.edu.tw/ntu-ocw/ocw/cou/106S201)及台灣通識網(http://get.aca.ntu.edu.tw/getcdb/handle/getcdb/395307), 同時也有電子書講義, 因此本課程希望同學每週上課前可以先大略預習課程內容, 記下問題. 教室實體上課時, 會由任課教師以1~1.5小時的時間扼要說明進度的重點並更新教學講義及影音的部分內容. 接著由助教與任課教師帶領同學實作及解答疑難. 同時助教每週也會出一些不計分, 不同難度的題目, 給同學回家練習. 同學在家 學習一些較不易理解的觀念或練習解題遇到瓶頸時, 可以反覆收看台大開放課程網或台灣通識網的教學錄影, 從中找尋解答的線索. 仍然無法解決的話, 可以搜尋網路資源或請教學長, 當然也可以下次上課時請教助教及任課教師.

注意: 有同學反應: 修習本課程, 最好先有一點基礎。

注意: 本課程鼓勵同學自組1至3人之團隊, 合作完成期末專題程式, 且各團隊期末專題程式成績即各成員共同之期末專題程式成績,占學期成績之30%. 因此務必慎選夥伴,若有重大合作困難,請及早反應處理.

注意: 除非考卷或作業批改登記發生錯誤,絕不更改成績.

注意: 如有違反學術倫理之行為, 除了學期成績當掉外, 還會通知指導教授/系所/學校. 此處所說的學術倫理, 個人認為就是有沒有適切回答如下問題:"此一內容的寫法是否會讓人以為那是我研發的成果?" 如果是你的心血, 要適度顯著說明貢獻範圍. 如果是別人的成果, 要明確標示來源, 不可曖昧引用或隱瞞, 意圖使讀者被誤導, 以為是你的貢獻.

注意: 本學期本校另有其他通識電腦程式設計課程, 內容與要求與本課程不同, 同學可以參考比較.

注意: 本課程使用程式整合開發環境(Integrated Development Environment, IDE) Microsoft Visual Studio 2022 for Windows, 請由官網https://visualstudio.microsoft.com/zh-hant/downloads/免費下載安裝社群(community)版本. 此一開發環境適合於Windows系統下執行. 教學影片及教師自撰的對應教科書內容分別以 Microsoft Visual Studio 2017 及 Microsoft Visual Studio 2012 為解說工具. 就本課程而言, 版本的差異不多, 並且將會在實體上課時說明.

注意:據之前助教經驗: 用平板來進行程式設計時, 須將鍵盤呈現在螢幕上. 想看螢幕畫面就得犧牲打字的便利性, 想打得順就看不到螢幕, 這是平板電腦先天的限制. 因此不推薦使用無實體鍵盤的平板電腦來撰寫程式.

課程緣起:
進入資訊科技時代,電腦程式設計已可說是未來「數位公民」應有的基本學養. 賈伯斯早在1995年就主張: "所有美國人都應該學程式,學習一門程式語言,學程式教你如何思考,就像學法律一樣。並不是要大家都去學法律,但法律教你一種思考方式,而程式帶給你另外一種思考方式。我認為電腦科學應該作為基本教育,每個人都應該花一年時間學習它"(http://www.inside.com.tw/2013/05/08/steve-jobs-the-lost-interview)。

國外知名大學多已對非理工科系開設相關課程, 因此台大推動普及電腦程式設計課程,增添助教人力, 要求確實實作, 增強同學們在資訊時代的競爭力。

教學內容:
本課程以C#為例,由基本觀念循序漸近,介紹計算機程式的語法與程式設計撰寫要領。Part I適合初學者,Part II引入物件觀念,則程度較好同學亦能有所收獲。修完本課程後,即有能力學習其他各種計算機語言之程式設計,或學習使用特定軟體工具,開發包括網路應用及手機APP等實用程式。

課程主要內容分章如下:
1.教學計畫及C#簡介
Part I. 函式
2.整合發展環境初步與簡易C#程式
3.實值變數與運算式
4.流程控制
5.陣列
6.函式
7.程式規劃與函式導向程式設計 (函式導向指分解工作為階層結構之多個函式, 並非計算機科學所稱之Functional Programming)
Part II. 物件
8.物件與類別
9.物件導向程式設計
10.繼承與多型
11.檔案讀寫與例外處理
12.基礎視窗程式設計: Windows Form
13.Collections


上課方式:
(1) 學生於課前課後觀看線上影片及閱讀講義電子書學習。
(2) 面授時間任課教師簡單說明課程重點以及影片與講義的更新內容。
(3) 助教帶領進行討論,與任課教師合作為學生解決問題,指導學生作業及期末專題主題方向及實作要領。助教也會出一些不同程度的不計分練習題,讓同學當場及回家練習。
(4) 學生課後可以練習每章講義複習題、解助教每週所出練習題、自修作業與期末專題相關網路或其他相關資料、撰寫作業程式及書面報告與口頭報告投影片、參與期末專題小組討論、合作開發期末專題程式、撰寫期末專題書面報告、製作期末專題介紹短片。
(5) 作業討論及期末專題,同學除了繳交書面報告外,也要錄製簡報短片,上傳 YouTube,互相觀摩,也讓助教(作業)及同儕(期末專題)評分。
(6) 期中期末考前,增加考古題討論時間,由助教及任課教師帶領解答同學疑難。

學習方式建議:
盡量同時看預錄講課影片及講義電子書,配合任課老師上課的提示,理解上課範圍所介紹的觀念及例題說明。其次不看例題程式碼,嘗試自己寫出例題所要求的程式。寫完後測試,並與例題所附程式碼比對,運用偵錯器、反覆看教學影片與線上資源和講義電子書、請教學長或助教,探討出錯或答案不一致的原因。完成後再做下一題例題。例題做完後,可以用相同方式,做書面講義提供的練習題、助教提供的練習題、期中期末複習題目、以及期中考與期末考的考古題,也可以開始構想各次計分作業及期末專題的主題。

請注意期中考後, 內容難度開始增加, 課外需要花更多時間實作, 預習及複習, 才可能學好. 如果有幾週沒能好好看講課影片及實作複習, 很容易跟不上.

近年本課程網址:

https://cool.ntu.edu.tw/courses/4605
https://ceiba.ntu.edu.tw/1082EE3029_
https://ceiba.ntu.edu.tw/1072EE3029_
https://ceiba.ntu.edu.tw/1062EE3029_
https://ceiba.ntu.edu.tw/1051EE3029_
https://ceiba.ntu.edu.tw/1042EE4052_
https://ceiba.ntu.edu.tw/1032EE4052_
https://ceiba.ntu.edu.tw/1022EE4052_
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2012Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2011Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2010Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2009Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2008Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2007Spring.htm 

課程目標
整合應用傳統課堂授課解惑及預錄授課影片自習,訓練學生能夠利用C# 語言寫作計算機程式,並從中學習資訊時代解決問題的新方法。包括問題辨識定義,解法規畫,邏輯表示與偵錯,及過程與結果呈現之表達等能力。願意組隊完成期末專題程式開發之同學,另可獲得軟體系統發展分工整合及團隊合作的經驗。 
課程要求
1. 先修課程:無 (有同學反應: 最好先有一點基礎)

2. 學期成績計算方式:
兩次計分作業 30% + 期中考 20% + 期末考 20% + 期末專題程式成果之YouTube網站展演短片15% + 期末專題程式書面報告 15%

助教可依同學與助教之互動表現, 酌加總分最多1.5分.

學期成績小數點以下四捨五入之後, 依學校規定方式由百分制轉為等第.

3. 作業
各次作業繳交日前,每位修課同學需自行依興趣選擇一個主題,撰寫程式及報告當成計分之作業,內容亦可配合期末專題,作為其先期嘗試或構成其一部份. 交來之作業須以書面介紹選擇題目之動機,構想解說,程式測試規畫, 流程圖(第4章介紹), 結構圖(第6, 7章介紹)或UML圖(第9章介紹), 程式列表, 程式測試執行結果,參考文獻, 學習心得等. 此外並需於規定時間內上傳口頭簡報視訊短片至 YouTube 平台.

同學若自修或向學長或助教學得課外內容,並應用於自行實作完成之作業, 需敘明自修或討論學習過程於學習心得部份. 作業亦可利用其他既有之相關開放使用程式碼或無版權之軟體工具及網路上可公用之數據, 影音, 圖片等資料, 直接或修改後採用, 以完成同學構想之主題, 但需註明出處及修改應用之處, 且如此產生之程式碼部份在程式列表中應予省略.報告如有抄襲造假等違反學術倫理情事,除本課程學期成績評為不及格外,亦將通知就讀系所及學校。

作業每次每人繳交一份, 不可多人合交. 如為多人合作, 亦須分開撰寫各人所負責之不同內容.

4. 期末專題程式:
課程進行中, 修課同學(不包含旁聽學生)自組1至3人之團隊, 於規定日期由NTU COOL上傳一頁之團隊名單及期末專題程式構想(不計分), 說明預定主題與選擇此一主題之動機, 及可能之實作方法.

團隊應盡早開始持續合作, 完成期末專題程式實作.每一團隊需以學術論文格式寫成一份書面報告(一團隊一報告), 比照正式學術報告格式撰寫, 包含摘要(Abstract), 緒論(Introduction), 本文(至少須涵括研究動機, 相關之課程章節, 文獻回顧, 理論說明, 實作流程架構, 研究過程,實作結果與討論, 並適當註明引用文獻及他人指導內容), 結論(Conclusions), 並適當註明引用文獻及他人指導內容),參考文獻(References), 與學習心得等內容. 並需於規定期限內上傳成果解說展演視訊短片至YouTube網站.

專題程式實作可與學長或助教討論, 但必須由團隊本身完成.
亦可利用其他既有之相關開放使用程式碼或無版權之軟體工具及網路上可公用之數據, 影音, 圖片等資料,直接或修改後採用, 以完成團隊構想之主題, 但需於書面報告及投影片註明何處由何人協助完成,及修改或直接應用既有資源之部分與其出處. 報告如有抄襲造假等違反學術倫理情事,除本課程成績評為不及格外,亦將通知就讀系所學校。

團隊之期末專題解說展演視訊短片及書面報告成績均即為各團隊成員之期末專題程式展演與書面報告成績.

5. 評分為A+的作業書面報告將會公布於NTU COOL, 供所有同學參考. 因此學習心得可以另外撰寫. 其pdf檔與口頭報告YouTube網址及書面報告檔案於 NTU COOL分別繳交. 
預期每週課後學習時數
 
Office Hours
另約時間 備註: 以 email 約定時間 
指定閱讀
1. 鄭士康, 以C#學習程式設計基礎:使用Visual Studio 2012 Express for Windows Desktop, 2013. (電子書, 與各章例題,練習題解答,及期中期末複習解答等構成完整講義), 各章內容會附加在NTU COOL 本教學網站的各週對應進度. 所有內容也已 共同壓縮成一個zip檔, Tutorial2016, NTU Space網址https://www.space.ntu.edu.tw/navigate/s/FBACCD53E0CE444CA0F803B0CC8F3E0AQQY ), 請有需要的同學自行下載.
有需要於上課及期中期末Open Book考試時參考紙本者, 加退選後及期中考後, 分上冊(即1~7章, 290頁), 與下冊( 8~13章, 478頁), 參加助教群揪團, 以印量取得較多折扣. 上述教科書雖是介紹Visual Studio 2012 Express for Windows Desk Top, 但基礎概念及內容仍可應用於本課程採用之Visual Studio Code.學生自行依學習進度閱讀, 需要更新的部分也會在上課時說明。

2. 各章教學資料分基本教材(講義內容投影片, 講課影片中盡量依進度仔細講解), 補充教材(主要由同學課外學習, 講課影片中可能略作提示), 延伸學習教材(課外自修)三部分, 整合為一個XMind心智圖.xmind檔. 可於上課前由 NTU COOL 平台下載. 同學請至https://actsmind.com/blog/ 下載安裝免費軟體XMind, 可開啟.xmind檔. 直接滑鼠雙按圖中的各種檔案圖標, 即可開啟各種教材檔案.
 
參考書目
網路上適合各種程度之各種學習資源,及市售C#入門與其他相關書籍,均可由同學依個別學習進度,自行搜尋閱讀參考。 
評量方式
(僅供參考)
 
No.
項目
百分比
說明
1. 
兩次計分作業 
30% 
各次作業繳交日前,每位修課同學需自行依興趣選擇一個主題,撰寫程式及報告當成計分之作業,內容亦可配合期末專題,作為其先期嘗試或構成其一部份. 交來之作業須以書面介紹選擇題目之動機,構想解說,程式測試規畫, 流程圖(第4章介紹), 結構圖(第6, 7章介紹)或UML圖(第9章介紹), 程式列表, 程式測試執行結果,參考文獻, 學習心得等. 作業及學習心得外.另需準備口頭簡報視訊短片, 上傳 YouTube , 並在 NTU COOL 繳交短片 YouTube 網址簡報展演除供同學相互觀摩外, 由助教逐一瀏覽評分並加註評語。書面報告由任課教師批改。 同學若自修或向學長或助教學得超過課程進度之內容,並應用於自行實作完成之作業, 需敘明自修或討論學習過程於學習心得部份. 作業亦可利用其他既有之相關開放使用程式碼或無版權之軟體工具及網路上可公用之數據, 影音, 圖片等資料, 直接或修改後採用, 以完成同學構想之主題, 但需註明出處及修改應用之處, 且如此產生之程式碼部份在程式列表中應予省略. 作業每次每人繳交一份, 不可多人合交. 如為多人合作, 亦須分開撰寫不同內容. 作業書面報告評分要點為主題之創新性, 構想及動機之說明及相關圖形是否清楚, 程式測試規畫是否完整. 使用外部資源之外, 個人獨力完成的程式部份是否切題有創意, 註解是否清楚適當,程式是否簡潔易讀, 學習心得是否言之有物等。 作業簡報短片由助教以1~5 分評分. 佔各次作業成績15%中的5%. 作業書面報告以 A+ = 97,A = 92,A- = 87,B+ = 82,B = 77,B- = 72等評分,缺交為0分,遲交依規定扣分。書面報告成績也將由百分數轉為各次作業成績15%中的10%. 作業遲交時,仍由助教及任課教師分別對簡報短片及書面報告評分, 該次作業總成績先打九折,隨後自預定繳交日第一節開始上課時間算起, 每逾一日(24小時),該次作業成績乘以0.85一次. 評分為A+的作業將會公布於NTU COOL, 供所有同學參考. 因此學習心得可以另外上傳. 
2. 
期中考 
20% 
於學校規定期中考時間,在原教室舉行,時間為下午2:20至6:00,範圍為第一章至前一週進度. 考試為Open Book, 同學可攜帶任何紙本資料, 但不可攜帶使用各式電腦(Computer)或計算器(Calculator), 亦不能借閱他人所攜資料. 考試進行中禁止使用手機. 因不可抗力之原因無法應考者, 請盡早於考試前通知任課老師商討變通方法. 考試舉行過後, 方告知缺考原因者, 除確屬不可抗力原因並附證明者,可與任課老師商量變通方法外,考試成績以零分計算. 考試由任課教師命題, 與助教共同監考, 助教批改. 
3. 
期末考 
20% 
於學校規定期末考時間,在原教室舉行, 時間為下午2:20至6:00, 範圍為期中考所考範圍之後的部分. 考試為Open Book, 同學可攜帶任何紙本資料, 但不可攜帶使用各式電腦(Computer)或計算器(Calculator), 亦不能借閱他人所攜資料. 考試進行中禁止使用手機. 因不可抗力之原因無法應考者, 請盡早於考試前通知任課老師商討變通方法. 考試舉行過後, 方告知缺考原因者, 除確屬不可抗力之原因無法應考並附證明者可與任課老師商量變通方法外, 考試成績以零分計算. 考試由任課教師命題, 與助教共同監考, 助教批改 
4. 
期末專題實作書面報告 
15% 
各團隊應完成期末專題實作, 將書面報告及學習心得分別轉成pdf檔,由 NTU COOL 平台繳交. 書面報告由任課老師主觀依照書面報告之整體表現, 以 A+ = 97, A = 92, A- = 87, B+ =82, B = 77, B- = 72 等評分, 缺交為0分. 不論原因, 遲交者成績打八折,截止時間後, 不再收補交之報告,該項成績為零分. 特殊情況請洽任課教師. 
5. 
期末專題實作展演視訊短片 
15% 
各團隊期末專題實作應製作5分鐘左右解說展演視訊短片, 於 期末考後一週之間上傳YiouTube網站. 並在NTU COOL 網站輸入YouTube網址. 再由同學線上互相就YouTube上的視訊短片評分. 每位修課同學為其他團隊作品評分時, 以1至5分評分,並鼓勵註記優缺點.自己團隊之作品則應予迴避不評分. 所評分數1至5分各分數所占人數應照屆時宣佈之規定比例分配, 不可全部打相同或均打少數特定分數. 各團隊之展演成績為其他同學評分截頭去尾後平均(x),換算得分為 70+5x, 未如期推出短片之團隊除有特殊原因外, 以0分計算. 若確因不可抗力原因致無法完成短片之團隊, 須附證明, 並於上傳截止日當晚12:00前以email通知任課老師, 安排適當時間向任課老師簡報, 並由任課教師評分. 如仍無法簡報者, 由團隊與任課老師商討變通方法. 
6. 
互動表現 
0% 
助教依同學之互動表現, 酌加總分最多1.5分. 
 
課程進度
週次
日期
單元主題
第0週
  這裡所列出來的進度,僅供實體上課參考。同學可以依照自己的狀況, 調整學習進度.
課程的整合開發環境(Integrated Development Environnment, IDE) 採用微軟 VS 2022,
但課程預錄影片使用 VS 2017 (僅適合 Windows 系統, 不適用於 Mac OS),
電子書講義則使用 VS 2012. 教室實體上課時, 將會說明 VS 2022 更新的內容.
課程教材為 .xmind 檔, 請使用開源軟體 XMind 8.0 或更新版本開啟 
第1週
2/18  第1,2章: 課程背景及學習指引, 整合發展環境初步與簡易C#程式. 
第2週
2/25  第3章: 實值變數與運算式 
第3週
3/4  第3,4章: 實值變數與運算式, 流程控制 
第4週
3/11  第4, 5章:流程控制, 陣列 
第5週
3/18  第5章 陣列 
第6週
3/25  第6章:函式, 繳交並討論第一次作業(參看作業區說明) 
第7週
4/1  第6, 7章: 函式, 程式規劃與函式導向程式設計, 討論考古題
 
第8週
4/8  期中考, 範圍至前一週進度 
第9週
4/15  第8章: 物件與類別 , 開始繳交分組名單及期末專題構想書 
第10週
4/22  第8章: 物件與類別 
第11週
4/29  第9章: 物件導向程式設計 
第12週
5/6  第10章 至 10.5: 繼承與多型  
第13週
5/13  第12章 基礎視窗介面程式設計, 繳交及討論第二次作業(參看作業區說明) 
第14週
5/20  第10章 10.5節之後: 繼承與多型, 
第15週
5/27  第11章: 檔案讀寫與例外處理 
第16週
6/3  端午節/期末考 
第17週
6/10  繳交期末專題